package com.hsnn.medstgmini.base.dict.controller;

import java.io.BufferedOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Type;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.hsnn.medstgmini.Constants;
import com.hsnn.medstgmini.base.dict.model.DicDrugname;
import com.hsnn.medstgmini.base.dict.service.DicDrugnameManager;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.util.ExcelUtil;
import com.hsnn.medstgmini.util.Pagination;
import com.hsnn.medstgmini.util.ParseDate;

/**
 * @category 通用名字典
 * @author 郦东飞
 * @date 2015年11月09日
 */
@Controller
@RequestMapping("/dicDrugname")
public class DicDrugnameController {
	
	private static final Logger log = Logger.getLogger(DicDrugnameController.class);
			
	
	@Autowired
	private DicDrugnameManager dicDrugnameManager;

	
	@Autowired
	private HttpServletRequest request;
	
	
	
	/**
	 * 
	 *@category 跳转通用名页面
	 *@author lidongfei
	 *@date 2015年11月09日
	 *String
	 */
	@RequestMapping("/toDicDrugnameList")
	public String  toDicDrugnameList() {
		log.info("enter toDicDrugnameList method!");
		return "/base/dict/drugnamelist";
	}
	
	/**
	 * 
	 *@category 获取通用名列表
	 *@author wangbing
	 *@date 2015年7月27日
	 *Pagination
	 */
	@RequestMapping("/getDicDrugnameList")
	@ResponseBody
	public Pagination getDicDrugnameList(){
		printParams();
		Pagination page =new Pagination(request);
		try{
		String drugnameCode = request.getParameter("drugnameCode");
		String drugName = request.getParameter("drugName");
		String status = request.getParameter("status");
		if(StringUtils.isNotBlank(drugnameCode)){
			page.getConditions().put("drugnameCode", drugnameCode.trim());
		}
		if(StringUtils.isNotBlank(drugName)){
			page.getConditions().put("drugName", drugName.trim());
		}
		if(StringUtils.isNotBlank(status)){
			page.getConditions().put("status", status);
		}
		page = dicDrugnameManager.getDicDrugnameList(page);
		} catch (Exception e) {
			e.printStackTrace();
		} catch(Error error) {
			error.printStackTrace();
		}
		return page;
	}

	
	
	/**
	 * 
	 *@category 启用停用（包含批量）
	 *@author 郦东飞
	 *@date 2015年11月09日
	 *Pagination
	 */
	@RequestMapping(value={"/enable","/disable"})
	@ResponseBody
	public Pagination batchChangeStatus(String array) {
		printParams();
		Pagination page = new Pagination();
		int count = 0;
		try {
			SysUser user = (SysUser) request.getSession().getAttribute(Constants.USERINFO);
			if (array != null && !"".equals(array)) {
				Gson gson = new Gson();
				Type type = new TypeToken<List<DicDrugname>>() {
				}.getType();
				List<DicDrugname> list = gson.fromJson(array, type);
				if (list != null && list.size()>0) {
					for (DicDrugname ddt : list) {
						ddt.setUpdUser(user.getId());
						count = dicDrugnameManager.changeStatus(ddt);
					}
					page.setSuccess(true);
					page.getConditions().put("count", count+"");
				}else{
					page.setSuccess(false);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			page.setSuccess(false);
		}
		return page;
	}
	
	
	/**
	 * 
	 *@category 新增和编辑
	 *@author lidongfei
	 *@date 2015年11月09日
	 *Pagination
	 */
	@RequestMapping(value={"/add"})
	@ResponseBody
	public Pagination dicDrugnameAdd(DicDrugname dicDrugname) {
		printParams();
		Pagination page=new Pagination();
        try {  
        	SysUser user = (SysUser)request.getSession().getAttribute(Constants.USERINFO);
        	dicDrugname.setUpdUser(user.getId());
        	dicDrugname.setUpdDatetime(ParseDate.parseFullFormat(new Date()));
        	String drugnameCode=dicDrugname.getDrugnameCode();
        	String drugName=dicDrugname.getDrugName();
        	if(StringUtils.isBlank(dicDrugname.getStatus())){
        		dicDrugname.setStatus("1");
        	}
        	
            if(StringUtils.isNotBlank(drugnameCode)){
                List<DicDrugname> list=dicDrugnameManager.getDrugnameBy("drugnameCode",drugnameCode);
            	if(list.size()>0){
            	    page.setMsg("通用名编码已存在!");
            	    page.setSuccess(false);
            	    return page;
                }
            }else{
            	page.setMsg("请输入通用名编码!");
            	page.setSuccess(false);
            	return page;
            }
            if(StringUtils.isNotBlank(drugName)){
            	List<DicDrugname> list=dicDrugnameManager.getDrugnameBy("drugName",drugName);
            	 if(list.size()>0){
            		 page.setMsg("通用名已存在!");
            		 page.setSuccess(false);
            		 return page;
                 }
            }else{
            	page.setMsg("请输入通用名!");
            	page.setSuccess(false);
            	return page;
            }
            if(StringUtils.isBlank(drugnameCode)){
        		dicDrugname.setDrugnameCode(null);
        	}
            page.getConditions().put("drugName", drugName);
            page.getConditions().put("drugnameCode", drugnameCode);
			page.getConditions().put("updUser", user.getId());
    		dicDrugnameManager.addAndEdit(page);
    		page.setMsg("操作成功!");
    		page.setSuccess(true);
        } catch (Exception e) {  
            e.printStackTrace(); 
            page.setMsg("操作失败!");
            page.setSuccess(false);
        }
		return page; 
	}
	
	//编辑
	@RequestMapping(value={"/edit"})
	@ResponseBody
	public Pagination dicDrugnameEdit(DicDrugname dicDrugname) {
		printParams();
		Pagination page=new Pagination();
        try {  
        	SysUser user = (SysUser)request.getSession().getAttribute(Constants.USERINFO);
        	dicDrugname.setUpdUser(user.getId());
        	dicDrugname.setUpdDatetime(ParseDate.parseFullFormat(new Date()));
        	String drugnameCode=dicDrugname.getDrugnameCode();
        	String drugName=dicDrugname.getDrugName();
        	if(StringUtils.isBlank(dicDrugname.getStatus())){
        		dicDrugname.setStatus("1");
        	}
        	
//            if(StringUtils.isNotBlank(drugnameCode)){
//                List<DicDrugname> list=dicDrugnameManager.getDrugnameBy("drugnameCode",drugnameCode);
//            	if(list.size()>1){
//            	    page.setMsg("通用名编码已存在!");
//            	    page.setSuccess(false);
//            	    return page;
//                }
//            }else{
//            	page.setMsg("请输入通用名编码!");
//            	page.setSuccess(false);
//            	return page;
//            }
            if(StringUtils.isNotBlank(drugName)){
            	List<DicDrugname> list=dicDrugnameManager.getDrugnameBy("drugName",drugName);
            	 if(list.size()>1){
            		 page.setMsg("通用名已存在!");
            		 page.setSuccess(false);
            		 return page;
                 }
            }else{
            	page.setMsg("请输入通用名!");
            	page.setSuccess(false);
            	return page;
            }
            if(StringUtils.isBlank(drugnameCode)){
        		dicDrugname.setDrugnameCode(null);
        	}
            page.getConditions().put("drugName", drugName);
            page.getConditions().put("drugnameCode", drugnameCode);
			page.getConditions().put("updUser", user.getId());
    		dicDrugnameManager.edit(page);
    		page.setMsg("操作成功!");
    		page.setSuccess(true);
        } catch (Exception e) {  
            e.printStackTrace(); 
            page.setMsg("操作失败!");
            page.setSuccess(false);
        }
		return page; 
	}
	
	
	
	
	/**
	 * 
	 *@category 获取参数打印
	 *@author 郦东飞
	 *@date 2015年11月10日
	 *Pagination
	 */
	@SuppressWarnings("rawtypes")
	public void printParams(){
		Enumeration paramNames = request.getParameterNames();
		try {
			while (paramNames.hasMoreElements()) {
				String paramName = (String) paramNames.nextElement();
				String paramValue = request.getParameter(paramName);
				log.info(paramName+":"+paramValue);
			}
		} catch (Exception e) {
			log.error("",e);
		}
	}
	
	@RequestMapping("exportExcel")
	@ResponseBody
	public Pagination exportExcel(HttpServletResponse response,String fileName){
		printParams();
		Pagination page = new Pagination();
		String drugnameCode = request.getParameter("drugnameCode");
		String drugName = request.getParameter("drugName");
		String status = request.getParameter("status");
		if(StringUtils.isNotBlank(drugnameCode)){
			page.getConditions().put("drugnameCode", drugnameCode.trim());
		}
		if(StringUtils.isNotBlank(drugName)){
			page.getConditions().put("drugName", drugName.trim());
		}
		if(StringUtils.isNotBlank(status)){
			page.getConditions().put("status", status.trim());
		}
		try { 
				response.addHeader("Content-Disposition", "attachment;filename="+new String("通用名.xls".getBytes("GB2312"),"iso8859-1")); 
				OutputStream os= new BufferedOutputStream(response.getOutputStream());  
				response.setContentType("application/vnd.ms-excel;charset=utf-8");  
				dicDrugnameManager.exportExcel(page,os);
		} catch (Exception e) {
			page.setSuccess(false);
			e.printStackTrace();
		}
		return page;
	}
}